Allow passing a NULL window to gdk_device_query_state
authorMatthias Clasen <mclasen@redhat.com>
Tue, 8 Aug 2017 23:45:09 +0000 (19:45 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 11 Aug 2017 19:45:24 +0000 (15:45 -0400)
Interpret NULL as "root window" here - we only have one
screen nowadays, so there is no choice involved, and this
will let us avoid dealing with the root window in the
fontend code.

gdk/broadway/gdkdevice-broadway.c
gdk/mir/gdkmirkeyboard.c
gdk/mir/gdkmirpointer.c
gdk/quartz/gdkdevice-core-quartz.c
gdk/wayland/gdkdevice-wayland.c
gdk/win32/gdkdevice-win32.c
gdk/win32/gdkdevice-wintab.c
gdk/x11/gdkdevice-core-x11.c
gdk/x11/gdkdevice-xi2.c

index b3abec01f7150f9e9258e7cba7693067b20294a7..4a6bf680b1c00e8114e4b29031c7ccfdd2611c7c 100644 (file)
@@ -149,14 +149,10 @@ gdk_broadway_device_query_state (GdkDevice        *device,
                                 gdouble          *win_y,
                                 GdkModifierType  *mask)
 {
-  GdkWindow *toplevel;
-  GdkWindowImplBroadway *impl;
   GdkDisplay *display;
   GdkBroadwayDisplay *broadway_display;
-  GdkScreen *screen;
   gint32 device_root_x, device_root_y;
   guint32 mouse_toplevel_id;
-  GdkWindow *mouse_toplevel;
   guint32 mask32;
 
   if (gdk_device_get_source (device) != GDK_SOURCE_MOUSE)
@@ -165,15 +161,11 @@ gdk_broadway_device_query_state (GdkDevice        *device,
   display = gdk_device_get_display (device);
   broadway_display = GDK_BROADWAY_DISPLAY (display);
 
-  impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
-  toplevel = impl->wrapper;
-
   _gdk_broadway_server_query_mouse (broadway_display->server,
                                    &mouse_toplevel_id,
                                    &device_root_x,
                                    &device_root_y,
                                    &mask32);
-  mouse_toplevel = g_hash_table_lookup (broadway_display->id_ht, GUINT_TO_POINTER (mouse_toplevel_id));
 
   if (root_x)
     *root_x = device_root_x;
@@ -187,6 +179,17 @@ gdk_broadway_device_query_state (GdkDevice        *device,
     *mask = mask32;
   if (child_window)
     {
+      GdkWindowImplBroadway *impl;
+      GdkWindow *toplevel;
+      GdkWindow *mouse_toplevel;
+
+      if (window == NULL)
+        window = gdk_get_default_root_window ();
+
+      impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
+      toplevel = impl->wrapper;
+
+      mouse_toplevel = g_hash_table_lookup (broadway_display->id_ht, GUINT_TO_POINTER (mouse_toplevel_id));
       if (gdk_window_get_window_type (toplevel) == GDK_WINDOW_ROOT)
        {
          *child_window = mouse_toplevel;
index 289473a89a5b829faa135a1952dd5c3949cddf81..01a14118dbe99ed5e13fbd3c770ff13e018fab75 100644 (file)
@@ -94,7 +94,6 @@ gdk_mir_keyboard_warp (GdkDevice *device,
 static void
 gdk_mir_keyboard_query_state (GdkDevice        *device,
                               GdkWindow        *window,
-                              GdkWindow       **root_window,
                               GdkWindow       **child_window,
                               gdouble          *root_x,
                               gdouble          *root_y,
index b5504245a83f9ec037b84d665db9075367a30f4e..08afee8bd63e3ea4beb890860301be19516cde1f 100644 (file)
@@ -133,7 +133,6 @@ gdk_mir_pointer_warp (GdkDevice *device,
 static void
 gdk_mir_pointer_query_state (GdkDevice        *device,
                              GdkWindow        *window,
-                             GdkWindow       **root_window,
                              GdkWindow       **child_window,
                              gdouble          *root_x,
                              gdouble          *root_y,
@@ -143,8 +142,6 @@ gdk_mir_pointer_query_state (GdkDevice        *device,
 {
   GdkMirPointer *p = GDK_MIR_POINTER (device);
 
-  if (root_window)
-    *root_window = gdk_screen_get_root_window (gdk_display_get_default_screen (gdk_device_get_display (device)));
   if (child_window)
     *child_window = p->over_window;
   if (root_x)
index da8599057961b924f7037aa06c695a85219bd35f..76f11523b6886ab724c3a1232def5497a1cd6d07 100644 (file)
@@ -258,7 +258,6 @@ gdk_quartz_device_core_query_state_helper (GdkWindow       *window,
 static void
 gdk_quartz_device_core_query_state (GdkDevice        *device,
                                     GdkWindow        *window,
-                                    GdkWindow       **root_window,
                                     GdkWindow       **child_window,
                                     gdouble          *root_x,
                                     gdouble          *root_y,
@@ -270,6 +269,9 @@ gdk_quartz_device_core_query_state (GdkDevice        *device,
   NSPoint point;
   gint x_tmp, y_tmp;
 
+  if (window == NULL)
+    window = _gdk_root;
+
   found_window = gdk_quartz_device_core_query_state_helper (window, device,
                                                             win_x, win_y,
                                                             mask);
index 664eebeb987e1c62f568f7b689caaf9fd6b7d148..1bc142a20e26d89357993fb9d1903863a23f5eaf 100644 (file)
@@ -592,6 +592,9 @@ gdk_wayland_device_query_state (GdkDevice        *device,
 {
   GdkWaylandPointerData *pointer;
 
+  if (window == NULL)
+    window = gdk_get_default_root_window ();
+
   pointer = GDK_WAYLAND_DEVICE (device)->pointer;
 
   if (child_window)
index 190372de2d0ad79e46dd4fa63783355a9e6767bf..fa74db6a75d65aebf738999b731e72da8e9b9d05 100644 (file)
@@ -100,7 +100,6 @@ get_current_mask (void)
 static void
 gdk_device_win32_query_state (GdkDevice        *device,
                               GdkWindow        *window,
-                              GdkWindow       **root_window,
                               GdkWindow       **child_window,
                               gdouble          *root_x,
                               gdouble          *root_y,
@@ -108,12 +107,12 @@ gdk_device_win32_query_state (GdkDevice        *device,
                               gdouble          *win_y,
                               GdkModifierType  *mask)
 {
-  GdkScreen *screen;
   POINT point;
   HWND hwnd, hwndc;
   GdkWindowImplWin32 *impl;
 
-  screen = gdk_window_get_screen (window);
+  if (window == NULL)
+    window = gdk_get_default_root_window ();
   impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
 
   hwnd = GDK_WINDOW_HWND (window);
@@ -133,7 +132,7 @@ gdk_device_win32_query_state (GdkDevice        *device,
   if (win_y)
     *win_y = point.y / impl->window_scale;
 
-  if (window == gdk_screen_get_root_window (screen))
+  if (window == gdk_get_default_root_window ())
     {
       if (win_x)
         *win_x += _gdk_offset_x;
@@ -158,9 +157,6 @@ gdk_device_win32_query_state (GdkDevice        *device,
         *child_window = NULL; /* Direct child unknown to gdk */
     }
 
-  if (root_window)
-    *root_window = gdk_screen_get_root_window (screen);
-
   if (mask)
     *mask = get_current_mask ();
 }
index 06037d87c55a13ec62616f359403e0170a5df410..6e11036c95ad581664c238f2271472da90e381e3 100644 (file)
@@ -109,7 +109,6 @@ gdk_device_wintab_warp (GdkDevice *device,
 static void
 gdk_device_wintab_query_state (GdkDevice        *device,
                                GdkWindow        *window,
-                               GdkWindow       **root_window,
                                GdkWindow       **child_window,
                                gdouble          *root_x,
                                gdouble          *root_y,
@@ -118,13 +117,13 @@ gdk_device_wintab_query_state (GdkDevice        *device,
                                GdkModifierType  *mask)
 {
   GdkDeviceWintab *device_wintab;
-  GdkScreen *screen;
   POINT point;
   HWND hwnd, hwndc;
   GdkWindowImplWin32 *impl;
 
   device_wintab = GDK_DEVICE_WINTAB (device);
-  screen = gdk_window_get_screen (window);
+  if (window == NULL)
+    window = gdk_get_default_root_window ();
   impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
 
   hwnd = GDK_WINDOW_HWND (window);
@@ -163,9 +162,6 @@ gdk_device_wintab_query_state (GdkDevice        *device,
         *child_window = NULL; /* Direct child unknown to gdk */
     }
 
-  if (root_window)
-    *root_window = gdk_screen_get_root_window (screen);
-
   if (mask)
     {
       *mask = get_current_mask ();
index 574a45b47e0203cf8cf58f3ae1669d9d32073dbe..e0d34ed32956d4cf1a46aba9b295cd817a464050 100644 (file)
@@ -256,15 +256,18 @@ gdk_x11_device_core_query_state (GdkDevice        *device,
                                  gdouble          *win_y,
                                  GdkModifierType  *mask)
 {
-  GdkWindowImplX11 *impl = GDK_WINDOW_IMPL_X11 (window->impl);
+  GdkWindowImplX11 *impl;
   GdkDisplay *display;
   GdkScreen *default_screen;
   Window xroot_window, xchild_window;
   int xroot_x, xroot_y, xwin_x, xwin_y;
   unsigned int xmask;
 
-  display = gdk_window_get_display (window);
+  display = gdk_device_get_display (device);
   default_screen = gdk_display_get_default_screen (display);
+  if (window == NULL)
+    window = gdk_screen_get_root_window (default_screen);
+  impl = GDK_WINDOW_IMPL_X11 (window->impl);
 
   if (!GDK_X11_DISPLAY (display)->trusted_client ||
       !XQueryPointer (GDK_WINDOW_XDISPLAY (window),
index 6b22abbf0d0b4b96340d50de19f2ff2f365a01e2..23857a5ca9c89bb06012be745c8e82f9b79a4f70 100644 (file)
@@ -327,7 +327,7 @@ gdk_x11_device_xi2_query_state (GdkDevice        *device,
                                 gdouble          *win_y,
                                 GdkModifierType  *mask)
 {
-  GdkWindowImplX11 *impl = GDK_WINDOW_IMPL_X11 (window->impl);
+  GdkWindowImplX11 *impl;
   GdkX11DeviceXI2 *device_xi2 = GDK_X11_DEVICE_XI2 (device);
   GdkDisplay *display;
   GdkScreen *default_screen;
@@ -337,8 +337,11 @@ gdk_x11_device_xi2_query_state (GdkDevice        *device,
   XIModifierState mod_state;
   XIGroupState group_state;
 
-  display = gdk_window_get_display (window);
+  display = gdk_device_get_display (device);
   default_screen = gdk_display_get_default_screen (display);
+  if (window == NULL)
+    window = gdk_screen_get_root_window (default_screen);
+  impl = GDK_WINDOW_IMPL_X11 (window->impl);
 
   if (gdk_device_get_device_type (device) == GDK_DEVICE_TYPE_SLAVE)
     {